package me.boot.web.common.template.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import me.boot.db.mybatis.template.SuperService;
import me.boot.db.mybatis.template.entity.Entity;
import me.boot.web.common.template.model.PageParam;

import java.io.Serializable;

/**
 * @Description:
 * @author: Sylar
 * @date: 2021年10月18日 4:20 下午
 */
public interface PageController<
        ID extends Serializable,
        PO extends Entity<ID>,
        S extends SuperService<ID, PO>,
        DTO>
        extends BaseController<ID, PO, S> {


    default IPage<PO> pageQuery(PageParam<DTO> pageParam) {
        // 根据前端传递的参数，构建查询条件
        QueryWrapper<PO> wrapper = pageParam.wrapper(getPoClass());
        PO po = fromPageQueryDTO(pageParam.getModel());
        wrapper.setEntity(po);

        //查询执行前可再次加工wrapper
        processPageQueryWrapper(wrapper);

        // 执行单表分页查询
        IPage<PO> page = new Page<>(pageParam.getCurrent(), pageParam.getSize());
        page = getService().page(page, wrapper);
        return page;
    }

    default PO fromPageQueryDTO(DTO queryDTO) {
        return dtoToPo(queryDTO);
    }

    default void processPageQueryWrapper(QueryWrapper<PO> wrapper) {
    }
}
